package edu.mju.dao.impl;

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.Connection;

/**
 * @Author:wyp
 * @Date:2020/4/27 16:04
 */
public class MySqlDbUtil {
    //静态数据源：连接池
    private static DruidDataSource dataSource = null;
    private static void initDataSource() throws Exception{
        if(dataSource==null){
            dataSource = new DruidDataSource();
            dataSource.setUrl("jdbc:mysql://localhost:3306/Journey?serverTimezone=Asia/Shanghai");
            //用户名
            dataSource.setUsername("xiaoxin");
            //密码
            dataSource.setPassword("LabiXiaoxin@01");
            //注册驱动
            dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
            //初始化连接数目
            dataSource.setInitialSize(2);
            //最小空闲连接数
            dataSource.setMinIdle(2);
            //连接池支持最大连接数
            dataSource.setMaxActive(10);
            //连接池中连接用完时,新的请求等待时间
            dataSource.setMaxWait(20000);

            //每20000毫秒检查一次连接池中空闲的连接,
            // 把空闲时间超过20000毫秒的连接断开
            // 直到连接池中的连接数到minIdle（2）为止
            dataSource.setTimeBetweenEvictionRunsMillis(20000);

            /**
             * 空闲时候 输出x 。防止连接被数据库主动断掉
             */
            //在连接池返回连接给调用者前用来对连接进行验证的查询 SQL
            dataSource.setValidationQuery("select 'x'");
            //申请连接的时候检测，如果空闲时间大于20000，执行上一步检测是否有效
            dataSource.setTestWhileIdle(true);
            //申请连接时执行validationQuery检测连接是否有效
            dataSource.setTestOnBorrow(true);

        }
    }

    public static Connection getConnection() throws Exception {
        initDataSource();
        return dataSource.getConnection();
    }
}
